<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Code linéaire</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Code_lin%C3%A9aire"> <link href="./_mw_/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Code_linéaire rootpage-Code_linéaire skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Code linéaire</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr"><p>En <a href="Math%C3%A9matiques" title="Mathématiques">mathématiques</a>, plus précisément en <a href="Th%C3%A9orie_des_codes" title="Théorie des codes">théorie des codes</a>, un <b>code linéaire</b> est un <a href="Code_correcteur" title="Code correcteur">code correcteur</a> ayant une certaine propriété de linéarité.
</p><p>Plus précisément, un tel code est structuré comme un <a href="Sous-espace_vectoriel" title="Sous-espace vectoriel">sous-espace vectoriel</a> d'un <a href="Espace_vectoriel_de_dimension_finie" title="Espace vectoriel de dimension finie">espace vectoriel de dimension finie</a> sur un <a href="Corps_fini" title="Corps fini">corps fini</a>. L'<a href="Espace_vectoriel_fini" title="Espace vectoriel fini">espace vectoriel fini</a> utilisé est souvent <i>F</i><sub>2</sub><sup>n</sup> le terme usuel est alors celui de <b>code linéaire binaire</b>. Il est décrit par trois paramètres [<i>n</i>, <i>k</i>, δ] . n décrit la dimension de l'espace qui le contient. Cette grandeur est appelée <b>longueur</b> du code. <i>k</i> représente la dimension du code, correspondant à la <i>taille</i> des mots une fois décodés et δ décrit la distance minimale, au sens de <a href="Distance_de_Hamming" title="Distance de Hamming">Hamming</a> entre chaque mot du code.
</p><p>Les codes linéaires représentent l'essentiel des codes correcteurs utilisés dans l'industrie. Cette approche couvre en particulier les codes proposant une simple détection, une nouvelle émission est alors demandée. D'autres codes permettent une correction des altérations à l'aide d'une gestion fine de la redondance.
</p><p>Rappel: <i>F</i><sub>2</sub> est l'unique <a href="Corps_commutatif" title="Corps commutatif">corps</a> à deux éléments et <i>F</i><sub>2</sub><sup>n</sup> est un espace vectoriel de dimension <i>n</i>. Si le corps de base est <i>F</i><sub>d</sub>, le corps contenant <i>d</i> éléments, le terme consacré est <b>code linéaire de base <i>d</i>. </b>La théorie des corps finis assure que <i>d</i> est une <a href="Nombre_primaire" title="Nombre primaire">puissance d'un nombre premier</a> et qu'il existe un unique corps possédant ce cardinal.
</p>
<div class="mw-heading mw-heading2"><h2 id="Approche_intuitive">Approche intuitive</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Code_correcteur"><a href="Code_correcteur" title="Code correcteur">Code correcteur</a></h3></div>
<p>Un code linéaire est un cas particulier de <a href="Code_correcteur" title="Code correcteur">code correcteur</a>. L'objectif est de permettre la correction d'erreurs après la transmission d'un <a href="Message" title="Message">message</a>. Cette correction est permise grâce à l'ajout d'informations redondantes. Le message est <a href="Plongement" title="Plongement">plongé</a> dans un ensemble plus grand, la différence de taille contient la redondance. Un exemple simple est celui du <a href="Code_de_r%C3%A9p%C3%A9tition" title="Code de répétition">code de répétition</a>, le message est, par exemple, envoyé trois fois, le décodage se fait par vote. Ici, l'ensemble plus grand est de dimension triple à celle du message initial.
</p><p>Rappelons les éléments de base de la formalisation. Il existe un ensemble <i>E</i> constitué de <a href="Suite_(math%C3%A9matiques)" title="Suite (mathématiques)">suites</a> de longueur <i>k</i>, c’est-à-dire qu'à partir du rang <i>k</i>, toutes les valeurs de la suite sont nulles, et à valeur dans un alphabet. Ces éléments sont l'espace des messages que l'on souhaite communiquer. Pour munir le message de la redondance souhaitée, il existe une <a href="Application_(math%C3%A9matiques)" title="Application (mathématiques)">application</a> φ <a href="Injection_(math%C3%A9matiques)" title="Injection (mathématiques)">injective</a> de <i>E</i> à valeurs dans <i>F</i>, l'espace des suites de longueur <i>n</i> à valeurs dans un alphabet. La fonction φ est appelée <i>encodage</i>, φ(<i>E</i>) est appelé le <i>code</i>, un élément de φ(<i>E</i>) <i>mot du code</i>, <i>n</i> la longueur du code et <i>k</i> la dimension du code.
</p><p>Pour permettre d'utiliser la puissance des outils mathématiques, il peut être judicieux d'utiliser des <a href="Structure_(math%C3%A9matiques)" title="Structure (mathématiques)">structures</a> <a href="Structure_alg%C3%A9brique" title="Structure algébrique">algébriques</a>. les alphabets de <i>E</i> et <i>F</i> sont choisis comme un même <a href="Corps_fini" title="Corps fini">corps fini</a>. Les éléments de <i>E</i> (resp. <i>F</i>) sont les suites finies de longueur <i>k</i> (resp. <i>n</i>), <i>E</i> et <i>F</i> héritent naturellement d'une structure d'<a href="Espace_vectoriel_de_dimension_finie" title="Espace vectoriel de dimension finie">espace vectoriel de dimension finie</a> et d'une <a href="Base_canonique" title="Base canonique">base canonique</a>, celle de l'espace des suites finies à valeurs dans un corps. L'application encodage est choisie <a href="Application_lin%C3%A9aire" title="Application linéaire">linéaire</a>.
</p><p>L'espace <i>F</i> est muni d'une <a href="Distance_(math%C3%A9matiques)" title="Distance (mathématiques)">distance</a> appelée <a href="Distance_de_Hamming" title="Distance de Hamming">distance de Hamming</a> dérivant d'une <span class="need_ref" title="Ce passage nécessite une référence (demandé le septembre 2011)." style="cursor:help;"><a href="Pseudo-norme" class="mw-redirect" title="Pseudo-norme">pseudo-norme</a></span><sup class="need_ref_tag" style="padding-left:2px;">[réf. nécessaire]</sup>, le <i>poids de Hamming</i>. Le poids de Hamming <i>p</i> d'un point de <i>F</i> correspond au nombre de ses coordonnées non nulles. La distance de Hamming entre deux éléments de <i>F</i> est le poids au sens de Hamming de leur différence.
</p>
<div class="mw-heading mw-heading3"><h3 id="Domaine_d'application"><span id="Domaine_d.27application"></span>Domaine d'application</h3></div>
<p>Les codes linéaires correspondent à une très large majorité de type de codes correcteurs. Ils sont utilisés pour la détection d'altérations, avec comme méthode de correction associée une demande de retransmission, la technique utilisée la plus usuelle est alors la <a href="Somme_de_contr%C3%B4le" title="Somme de contrôle">somme de contrôle</a>. Elles sont utilisés dans une multitude de situations, depuis quelques erreurs isolées à de vastes altérations ou des phénomènes d'effacements.
</p><p>Si le cadre utilisé est largement employé, il ne répond néanmoins pas à l'intégralité des besoins. On peut citer deux grands sujets, peu traités par la théorie des codes linéaires. Un bon code répond à un critère d'optimalité, il est dit parfait. Le cadre de la théorie des codes linéaires offre des critères pour valider cette optimalité. En revanche, il ne propose pas de méthode pour concevoir ce type de code.
</p><p>Une méthode générale pour la correction des erreurs est disponible, le <a href="D%C3%A9codage_par_syndrome" title="Décodage par syndrome">décodage par syndrome</a>. Cette méthode consiste à créer une table associant à chaque erreur, sa solution. La table croît exponentiellement avec le nombre de lettres susceptible d'être erronées. Dans le cas d'une large capacité de correction, cette approche n'est plus opérationnelle.
</p><p>La théorie des codes cycliques, utilisant largement les propriétés des corps finis répond à ces deux besoins. Un code cyclique est un code linéaire possédant une structure algébrique supplémentaire.
</p>
<div class="mw-heading mw-heading2"><h2 id="Définitions"><span id="D.C3.A9finitions"></span>Définitions</h2></div>
<ul><li>Soit <i>p</i> un <a href="Nombre_premier" title="Nombre premier">nombre premier</a>, <i>d</i> une puissance de <i>p</i>, <i>n</i> un entier strictement positif et <i>k</i> un entier plus petit que <i>n</i>. Un <b>code linéaire</b> <i>C</i> de dimension <i>k</i> et de longueur <i>n</i> est un <a href="Sous-espace_vectoriel" title="Sous-espace vectoriel">sous-espace vectoriel</a> de <i>F</i><sub>d</sub><sup>n</sup> de <a href="Dimension_d'un_espace_vectoriel" title="Dimension d'un espace vectoriel">dimension</a> <i>k</i>. Si <i>d</i> est égal à deux, le code est dit <b><a href="Syst%C3%A8me_binaire" title="Système binaire">binaire</a></b>. Sinon, on parle de code linéaire de <b>base d</b>.</li></ul>
<p>Ici, <i>F</i><sub>d</sub> désigne l'unique corps à <i>d</i> éléments (cf l'article <a href="Corps_fini" title="Corps fini">corps fini</a>). On remarque que l'espace vectoriel des suites à valeurs dans <i>F</i><sub>d</sub> est identifié à <i>F</i><sub>d</sub><sup>n</sup>. L'espace vectoriel <i>F</i><sub>d</sub><sup>n</sup> est muni de la <a href="Distance_de_Hamming" title="Distance de Hamming">distance de Hamming</a>.
</p><p>Comme pour les autres codes correcteurs, la notion de <i>paramètres</i> s'applique. Cependant, pour tenir compte de la structure d'espace vectoriel, elle est un peu modifiée:
</p>
<ul><li>Les <b>paramètres</b> d'un code sont notés [<i>n</i>, <i>k</i>, δ] ou δ désigne la distance minimale entre deux points du code.</li></ul>
<p>La définition de paramètre pour les codes linéaires n'est donc pas compatible avec celle, plus générique utilisées pour les codes correcteurs. Pour cette raison, traditionnellement les paramètres d'un code linéaire sont notés [<i>n</i>, <i>k</i>, δ] et ceux d'un code correcteur général {<i>n</i>, <i>M</i>, δ}.
</p><p>Comme précédemment, il existe une application d'<i>encodage</i> : φ.
</p>
<ul><li>L'application d'<b>encodage</b> φ d'un code linéaire est une application linéaire injective de <i>F</i><sub>d</sub><sup>k</sup> dans <i>F</i><sub>d</sub><sup>n</sup>.</li></ul>
<ul><li>La <a href="Matrice_(math%C3%A9matiques)" title="Matrice (mathématiques)">matrice</a> <i>G</i> de φ dans les bases canoniques est dite <b><a href="Matrice_g%C3%A9n%C3%A9ratrice" title="Matrice génératrice">matrice génératrice</a></b> du code <i>C</i>. Elle vérifie l'égalité suivante :</li></ul>
<center><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \forall x\in \mathbb {F} _{d}^{k}\quad G.x=\varphi (x)\in C\subset \mathbb {F} _{d}^{n}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi mathvariant="normal">∀<!-- ∀ --></mi>
<mi>x</mi>
<mo>∈<!-- ∈ --></mo>
<msubsup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="double-struck">F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>d</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msubsup>
<mspace width="1em"></mspace>
<mi>G</mi>
<mo>.</mo>
<mi>x</mi>
<mo>=</mo>
<mi>φ<!-- φ --></mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
<mo>∈<!-- ∈ --></mo>
<mi>C</mi>
<mo>⊂<!-- ⊂ --></mo>
<msubsup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="double-struck">F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>d</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>n</mi>
</mrow>
</msubsup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \forall x\in \mathbb {F} _{d}^{k}\quad G.x=\varphi (x)\in C\subset \mathbb {F} _{d}^{n}}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/e05bd77e516d19c6e86dcfa3fcaba2383b543b6c.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:32.59ex; height:3.176ex;" alt="{\displaystyle \forall x\in \mathbb {F} _{d}^{k}\quad G.x=\varphi (x)\in C\subset \mathbb {F} _{d}^{n}}" loading="lazy"></span></center>
<p>Le contrôle permettant la vérification et les éventuelles corrections est donné par une application linéaire <i>h</i> de <i>F</i><sub>d</sub><sup>n</sup> dans <i>F</i><sub>d</sub><sup>n-k</sup> ayant pour <a href="Noyau_(alg%C3%A8bre)" title="Noyau (algèbre)">noyau</a> <i>C</i>. La théorie de l'<a href="Alg%C3%A8bre_lin%C3%A9aire" title="Algèbre linéaire">algèbre linéaire</a> montre qu'une telle application existe, il suffit par exemple de considérer un <a href="Projecteur_(math%C3%A9matiques)" title="Projecteur (mathématiques)">projecteur</a> sur un <a href="Sous-espace_suppl%C3%A9mentaire" title="Sous-espace supplémentaire">sous-espace supplémentaire</a> de <i>C</i> parallèlement à <i>C</i>.
</p>
<ul><li>La matrice <i>H</i> de <i>h</i> dans les bases canoniques est dite <b><a href="Matrice_de_contr%C3%B4le" title="Matrice de contrôle">matrice de contrôle</a></b> du code <i>C</i>. Elle vérifie les propriétés suivantes :</li></ul>
<center><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \forall x\in \mathbb {F} _{d}^{n}\quad H.^{t}x=0\;\Leftrightarrow \;x\in C}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi mathvariant="normal">∀<!-- ∀ --></mi>
<mi>x</mi>
<mo>∈<!-- ∈ --></mo>
<msubsup>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="double-struck">F</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>d</mi>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>n</mi>
</mrow>
</msubsup>
<mspace width="1em"></mspace>
<mi>H</mi>
<msup>
<mo>.</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>t</mi>
</mrow>
</msup>
<mi>x</mi>
<mo>=</mo>
<mn>0</mn>
<mspace width="thickmathspace"></mspace>
<mo stretchy="false">⇔<!-- ⇔ --></mo>
<mspace width="thickmathspace"></mspace>
<mi>x</mi>
<mo>∈<!-- ∈ --></mo>
<mi>C</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \forall x\in \mathbb {F} _{d}^{n}\quad H.^{t}x=0\;\Leftrightarrow \;x\in C}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/b7b804dddf0b755cb60a5a9f993bd2818fbb108e.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:30.779ex; height:3.009ex;" alt="{\displaystyle \forall x\in \mathbb {F} _{d}^{n}\quad H.^{t}x=0\;\Leftrightarrow \;x\in C}" loading="lazy"></span></center>
<p>Le terme de <b>matrice de parité</b> est aussi utilisé pour désigner la <i>matrice de contrôle</i>.
</p><p>Remarque : <i>Ces notations sont utilisées dans le reste de l'article.</i>
</p>
<div class="mw-heading mw-heading2"><h2 id="Propriétés"><span id="Propri.C3.A9t.C3.A9s"></span>Propriétés</h2></div>
<p>Toutes les propriétés de l'<a href="Alg%C3%A8bre_lin%C3%A9aire" title="Algèbre linéaire">algèbre linéaire</a> s'appliquent aux codes linéaires. Le code est ainsi à la fois plus facile à implémenter et à décoder. De plus les outils de génération d'espace vectoriel comme l'<a href="Espace_dual" title="Espace dual">espace dual</a> ou le <a href="Produit_tensoriel" title="Produit tensoriel">produit tensoriel</a> permettent de concevoir des nouveaux codes, parfois plus adaptés aux contraintes industrielles.
</p>
<div class="mw-heading mw-heading3"><h3 id="Matrice_génératrice"><span id="Matrice_g.C3.A9n.C3.A9ratrice"></span><a href="Matrice_g%C3%A9n%C3%A9ratrice" title="Matrice génératrice">Matrice génératrice</a></h3></div>
<p>L'application d'encodage est linéaire, elle se représente donc et se calcule grâce à sa <a href="Matrice_g%C3%A9n%C3%A9ratrice" title="Matrice génératrice">matrice génératrice</a>. Un code est entièrement défini par sa matrice génératrice, de dimension k x n. De plus comme les propriétés de son code ne dépendent que de la géométrie φ(<i>E</i>). Si <i>f</i> est un isomorphisme de <i>E</i>, le code défini par l'application φ<i>of</i> est le même que celui de φ. Ce qui donne lieu à la définition suivante :
</p>
<ul><li>Deux codes sur un même alphabet <i>F</i><sub>d</sub> de longueur <i>k</i> définis par deux matrices génératrices <i>G</i> et <i>G' </i>tel qu'il existe une <a href="Matrice_carr%C3%A9e" class="mw-redirect" title="Matrice carrée">matrice carrée</a> inversible <i>P</i> d'ordre <i>k</i> vérifiant <i>G</i> =<i>G'</i>.<i>P</i> sont dits <b>équivalents</b>.</li></ul>
<p>Il existe une forme particulièrement simple pour la matrice <i>G</i> :
</p>
<ul><li>Un code linéaire dont la matrice génératrice possède pour <i>k</i> premières lignes une <a href="Matrice_identit%C3%A9" title="Matrice identité">matrice identité</a> d'ordre <i>k</i> est dit <b>code systématique</b>.</li></ul>
<p>L'article associé à ce paragraphe démontre une propriété importante :
</p>
<ul><li><i>Tout code linéaire est équivalent à un code systématique.</i></li></ul>
<p>Cette écriture accélère et simplifie l'encodage et le décodage. La matrice prend alors la forme suivante :
</p>
<center><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle G={I_{k} \choose C}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>G</mi>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mrow>
<mrow class="MJX-TeXAtom-OPEN">
<mo maxsize="2.047em" minsize="2.047em">(</mo>
</mrow>
<mfrac linethickness="0">
<msub>
<mi>I</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mi>C</mi>
</mfrac>
<mrow class="MJX-TeXAtom-CLOSE">
<mo maxsize="2.047em" minsize="2.047em">)</mo>
</mrow>
</mrow>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle G={I_{k} \choose C}}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/ebf785c9cabdacc05b1e9ddd18c94fa07c892145.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:10.458ex; height:6.176ex;" alt="{\displaystyle G={I_{k} \choose C}}" loading="lazy"></span></center>
<p>Les coordonnées de la matrice <i>C</i> correspondent à la redondance, leur objectif est la détection et la correction d'erreurs éventuelles:
</p>
<ul><li>Les <i>n</i> - <i>k</i> dernières coordonnées d'un mot du code systématique sont dites <b>bits de contrôle</b> ou parfois <b>somme de contrôle</b>.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Matrice_de_contrôle"><span id="Matrice_de_contr.C3.B4le"></span><a href="Matrice_de_contr%C3%B4le" title="Matrice de contrôle">Matrice de contrôle</a></h3></div>
<p>Dans le cas linéaire, le code est un sous-espace vectoriel de dimension <i>k</i>. Il existe alors une application linéaire <a href="Surjection" title="Surjection">surjective</a> de <i>F</i> dans un espace de dimension <i>n</i> - <i>k</i> ayant pour noyau exactement le code :
</p>
<ul><li>Une <b><a href="Matrice_de_contr%C3%B4le" title="Matrice de contrôle">matrice de contrôle</a></b> d'un code φ(<i>E</i>) est une matrice <i>H</i> de dimension <i>n</i>x<i>n</i> - <i>k</i> tel que :</li></ul>
<center><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x\in \varphi (E)\Leftrightarrow H.^{t}x=0}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>x</mi>
<mo>∈<!-- ∈ --></mo>
<mi>φ<!-- φ --></mi>
<mo stretchy="false">(</mo>
<mi>E</mi>
<mo stretchy="false">)</mo>
<mo stretchy="false">⇔<!-- ⇔ --></mo>
<mi>H</mi>
<msup>
<mo>.</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>t</mi>
</mrow>
</msup>
<mi>x</mi>
<mo>=</mo>
<mn>0</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle x\in \varphi (E)\Leftrightarrow H.^{t}x=0}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/cda6fe6d8374352ba24df6e579bf13c3a2129db7.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:22.404ex; height:3.009ex;" alt="{\displaystyle x\in \varphi (E)\Leftrightarrow H.^{t}x=0}" loading="lazy"></span></center>
<p>Dans le cas d'un code systématique, l'expression de la matrice génératrice offre immédiatement celle d'une matrice de contrôle.
</p>
<ul><li><i>Dans le cas d'un code systématique, si </i>G<i> est l'expression d'une matrice génératrice alors l'expression suivante est celle d'une matrice de contrôle :</i></li></ul>
<center><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle si\quad G={I_{k} \choose C}\quad alors\quad H=(-C\;I_{n-k})\;}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>s</mi>
<mi>i</mi>
<mspace width="1em"></mspace>
<mi>G</mi>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mrow>
<mrow class="MJX-TeXAtom-OPEN">
<mo maxsize="2.047em" minsize="2.047em">(</mo>
</mrow>
<mfrac linethickness="0">
<msub>
<mi>I</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mi>C</mi>
</mfrac>
<mrow class="MJX-TeXAtom-CLOSE">
<mo maxsize="2.047em" minsize="2.047em">)</mo>
</mrow>
</mrow>
</mrow>
<mspace width="1em"></mspace>
<mi>a</mi>
<mi>l</mi>
<mi>o</mi>
<mi>r</mi>
<mi>s</mi>
<mspace width="1em"></mspace>
<mi>H</mi>
<mo>=</mo>
<mo stretchy="false">(</mo>
<mo>−<!-- − --></mo>
<mi>C</mi>
<mspace width="thickmathspace"></mspace>
<msub>
<mi>I</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>n</mi>
<mo>−<!-- − --></mo>
<mi>k</mi>
</mrow>
</msub>
<mo stretchy="false">)</mo>
<mspace width="thickmathspace"></mspace>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle si\quad G={I_{k} \choose C}\quad alors\quad H=(-C\;I_{n-k})\;}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/c29b20720ab5dc4aac62c0b82e43c27e411de89b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.505ex; width:40.721ex; height:6.176ex;" alt="{\displaystyle si\quad G={I_{k} \choose C}\quad alors\quad H=(-C\;I_{n-k})\;}" loading="lazy"></span></center>
<p>Ici, I<sub>k</sub> désigne la matrice carrée identité d'ordre <i>k</i>.
Cette matrice offre une manière relativement simple de calculer la distance minimale :
</p>
<ul><li><i>La distance minimale δ d'un code linéaire est égale à la dimension du plus petit sous-espace vectoriel </i>S<i> de </i>F<i> généré par des éléments de la base canonique et tel que la restriction de la matrice de contrôle à </i>S<i> soit non <a href="Injection_(math%C3%A9matiques)" title="Injection (mathématiques)">injective</a>.</i></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Distance_de_Hamming"><a href="Distance_de_Hamming" title="Distance de Hamming">Distance de Hamming</a></h3></div>
<p>Dans le cas d'un code linéaire, la <a href="Distance_de_Hamming" title="Distance de Hamming">distance de Hamming</a> s'exprime comme une distance issue d'une pseudo-norme. Le <a href="Poids_de_Hamming" class="mw-redirect" title="Poids de Hamming">poids de Hamming</a>, qui à un code associe le nombre de coordonnées non nulles, joue ici le rôle de pseudo-norme.
</p>
<ul><li>Si ω désigne le poids de Hamming pour un code linéaire <i>C</i>, alors la <b>distance de Hamming</b> <i>d</i> est définie par la formule suivante:</li></ul>
<center><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \forall x,y\in C\quad d(x,y)=\omega (x-y)\;}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi mathvariant="normal">∀<!-- ∀ --></mi>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo>∈<!-- ∈ --></mo>
<mi>C</mi>
<mspace width="1em"></mspace>
<mi>d</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>y</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>ω<!-- ω --></mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo>−<!-- − --></mo>
<mi>y</mi>
<mo stretchy="false">)</mo>
<mspace width="thickmathspace"></mspace>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \forall x,y\in C\quad d(x,y)=\omega (x-y)\;}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/e58d8552b6319dba94161cf6a78ca73e59ef813d.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:30.61ex; height:2.843ex;" alt="{\displaystyle \forall x,y\in C\quad d(x,y)=\omega (x-y)\;}" loading="lazy"></span></center>
<p>La linéarité de la structure sous-jacente introduit une propriété directe:
</p>
<ul><li><i>La distance minimale δ entre deux points du code est égale au minimum du poids des mots du code non nuls.</i></li></ul>
<p>Pour s'en convaincre, il suffit de remarquer que si <i>x</i> et <i>y</i> sont deux mots du code, alors leur différence est aussi un mot du code.
</p>
<div class="mw-heading mw-heading3"><h3 id="Borne_de_Singleton_et_code_MDS">Borne de Singleton et code MDS</h3></div>
<p>Le nombre maximum d'erreurs assurément corrigibles <i>t</i> découle directement de la distance minimale δ. En effet, <i>t</i> est le plus grand entier strictement inférieur à δ/2. La situation idéale est celle où les <a href="Boule_(math%C3%A9matiques)" class="mw-redirect" title="Boule (mathématiques)">boules</a> fermées de centre les mots du code et de rayon <i>t</i> forment une <a href="Partition_(math%C3%A9matiques)" class="mw-redirect" title="Partition (mathématiques)">partition</a> de <i>F</i>. On parle alors de <i>parfait</i>.
</p>
<ul><li>La majoration suivante est vérifiée pour tous les codes linéaires. Elle se nomme <b>borne de Singleton</b>:</li></ul>
<center><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n-k\geq \delta -1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>n</mi>
<mo>−<!-- − --></mo>
<mi>k</mi>
<mo>≥<!-- ≥ --></mo>
<mi>δ<!-- δ --></mi>
<mo>−<!-- − --></mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle n-k\geq \delta -1}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/912ed5d6bfbbea7a32699fee797eb60da55507de.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:13.596ex; height:2.509ex;" alt="{\displaystyle n-k\geq \delta -1}" loading="lazy"></span></center>
<p>Si la borne de Singleton est atteinte, le code est dit MDS.
</p>
<div class="mw-heading mw-heading3"><h3 id="Code_dual">Code dual</h3></div>
<p>La structure linéaire du code donne naturellement naissance à la notion de code dual. La <a href="Forme_bilin%C3%A9aire_sym%C3%A9trique" title="Forme bilinéaire symétrique">forme bilinéaire symétrique</a> canonique permet ainsi de définir le code dual de <i>C</i>.
</p>
<ul><li><b>Le code dual</b> d'un code linéaire <i>C</i> de dimension <i>k</i> est le sous-espace orthogonal de <i>C</i> dans l'espace muni de sa forme bilinéaire symétrique canonique. C'est un code de même longueur <i>n</i> et de dimension <i>n</i> - <i>k</i>. Il est souvent noté <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \scriptstyle {C^{\perp }}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mstyle displaystyle="false" scriptlevel="1">
<mrow class="MJX-TeXAtom-ORD">
<msup>
<mi>C</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo>⊥<!-- ⊥ --></mo>
</mrow>
</msup>
</mrow>
</mstyle>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \scriptstyle {C^{\perp }}}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/01204c048728c513baa4e8ca822da00e24a44a4f.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.474ex; height:2.176ex;" alt="{\displaystyle \scriptstyle {C^{\perp }}}" loading="lazy"></span>. Un code est dit <b>autodual</b> s'il est égal à son dual.</li></ul>
<p>Dans le cas d'un code systématique, auquel il est toujours possible de se ramener, la matrice de contrôle de <i>C</i> devient une matrice génératrice de son dual. Il suffit alors de réordonnancer la base pour obtenir un code systématique. De même une matrice génératrice de <i>C</i> est une matrice de contrôle de son dual.
</p><p>Il est possible de calculer la distance minimale de <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \scriptstyle C^{\bot }}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mstyle displaystyle="false" scriptlevel="1">
<msup>
<mi>C</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">⊥<!-- ⊥ --></mi>
</mrow>
</msup>
</mstyle>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \scriptstyle C^{\bot }}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/3e66843f3d59dc4f7768effbd1e644d8528a9c4d.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.474ex; height:2.176ex;" alt="{\displaystyle \scriptstyle C^{\bot }}" loading="lazy"></span> à partir de <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle C}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>C</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle C}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/4fc55753007cd3c18576f7933f6f089196732029.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.766ex; height:2.176ex;" alt="{\displaystyle C}" loading="lazy"></span>, toutefois il n'est pas suffisant de connaitre celle de <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle C}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>C</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle C}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/4fc55753007cd3c18576f7933f6f089196732029.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.766ex; height:2.176ex;" alt="{\displaystyle C}" loading="lazy"></span> : il faut connaitre le <a href="Polyn%C3%B4me" title="Polynôme">polynôme</a> énumérateur des poids de <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle C}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>C</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle C}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/4fc55753007cd3c18576f7933f6f089196732029.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.766ex; height:2.176ex;" alt="{\displaystyle C}" loading="lazy"></span>. L'<a href="Identit%C3%A9_de_MacWilliams" title="Identité de MacWilliams">identité de MacWilliams</a> donne alors celui de <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \scriptstyle C^{\bot }}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mstyle displaystyle="false" scriptlevel="1">
<msup>
<mi>C</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="normal">⊥<!-- ⊥ --></mi>
</mrow>
</msup>
</mstyle>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \scriptstyle C^{\bot }}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/3e66843f3d59dc4f7768effbd1e644d8528a9c4d.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.474ex; height:2.176ex;" alt="{\displaystyle \scriptstyle C^{\bot }}" loading="lazy"></span> d'où on extrait simplement la distance minimale de ce dernier.
</p>
<div class="mw-heading mw-heading3"><h3 id="Code_produit">Code produit</h3></div>
<p>L'<a href="Alg%C3%A8bre_lin%C3%A9aire" title="Algèbre linéaire">algèbre linéaire</a> offre de multiples autres techniques compatibles avec les codes. Le <a href="Produit_tensoriel" title="Produit tensoriel">produit tensoriel</a> est un exemple. À deux <a href="Espace_vectoriel" title="Espace vectoriel">espaces vectoriels</a>, il en associe un troisième <a href="Isomorphisme" title="Isomorphisme">isomorphe</a> aux applications linéaires du premier espace dans le deuxième.
</p>
<ul><li>Si <i>C</i><sub>0</sub> (resp. <i>C</i><sub>1</sub>) est un code linéaire de paramètre [<i>n</i><sub>0</sub>, <i>k</i><sub>0</sub>, <i>d</i><sub>0</sub>] (resp. [<i>n</i><sub>1</sub>, <i>k</i><sub>1</sub>, δ<sub>1</sub>]), alors le produit tensoriel des deux codes est un code de paramètre [<i>n</i><sub>0</sub>.<i>n</i><sub>1</sub>, <i>k</i><sub>0</sub>.<i>k</i><sub>1</sub>, δ<sub>0</sub>.δ<sub>1</sub>]. Ce code est appelé <b>code produit</b> de <i>C</i><sub>0</sub> et <i>C</i><sub>1</sub>.</li></ul>
<p>Il permet de corriger toute configuration comportant moins de δ<sub>0</sub>.δ<sub>1</sub>/4 erreurs.
</p>
<div class="mw-heading mw-heading2"><h2 id="Traitement_des_erreurs">Traitement des erreurs</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Détection"><span id="D.C3.A9tection"></span>Détection</h3></div>
<p>La technique la plus simple de traitement des erreurs se limite à une validation. Si le message n'est pas élément du code, alors il est déclaré faux. En général, une nouvelle demande de transmission est la technique de correction.
</p><p>La méthode la plus fréquemment utilisée consiste à adjoindre au message un ou plusieurs bits de contrôle correspondant à la somme dans le corps fini des coefficients du message. Cette technique est l'analogue de la <a href="Preuve_par_neuf" title="Preuve par neuf">preuve par neuf</a>.
</p><p>Quitte à augmenter le nombre de bits de contrôle, cette méthode peut accroitre son niveau de fiabilité. Si la probabilité est suffisamment forte pour supposer qu'une seule erreur est à même de se glisser dans le message, alors un bit de contrôle remplit la condition.
</p><p>Dans le cas d'un unique bit de contrôle, alors les paramètres du code sont [<i>n</i>, <i>n</i> - 1, 2]. Un tel code ne peut pas procéder à la correction de l'erreur par lui-même. En effet pour chaque erreur, il existe <i>n</i> - 1 points du code qui sont proches. Des informations supplémentaires sont nécessaires pour une auto-correction.
</p><p>L'implémentation est simple, le calcul de l'image du message par la matrice de contrôle fournit l'information. Si l'image est nulle, alors le message correspond à un code et il est sans erreur. Sinon, une erreur est déclarée.
</p>
<div class="mw-heading mw-heading3"><h3 id="Correction">Correction</h3></div>
<p>La question est ici traitée uniquement dans le cas des codes systématiques. Non seulement c'est la solution considérée par l'industrie, mais de plus, toute autre configuration est équivalente à celle-là.
</p><p>Dans un premier temps, il est possible de considérer uniquement le problème au <a href="Vecteur_nul" title="Vecteur nul">vecteur nul</a>. Le message reçu possède donc comme <i>k</i> premières coordonnées 0 et des bits de contrôle <i>c</i> non tous nuls. Cette situation correspond à une erreur, car l'image du vecteur nul par la matrice génératrice donne le vecteur nul et donc les bits de contrôle sont tous nuls pour un code ayant ses <i>k</i> premières coordonnées nulles.
</p><p>La correction correspond au message <i>m</i> de plus petit poids de Hamming et ayant pour image par la matrice de contrôle -<i>H</i>.<i>c</i>. Si le nombre d'altérations ayant généré le vecteur (0, <i>c</i>) est inférieur à (δ - 1)/2, alors il existe un unique <i>m</i> tel que <i>H</i>.<i>m</i> = -<i>H</i>.<i>c</i>.
Ici, <i>H</i>.<i>c</i> désigne par abus le vecteur <i>H</i>.(0,<i>c</i>). Le code associé est <i>m</i> - <i>c</i> et le message initial est <i>m</i>. On vérifie de fait que <i>H</i>.(<i>m</i> - <i>c</i>) = 0 et <i>m</i> - <i>c</i> est un code. Il est alors possible, à chaque valeur de <i>H</i>.<i>c</i>, d'associer une correction <i>m</i>.
</p>
<ul><li>La valeur <i>H</i>.(0,<i>c</i>) où <i>H</i> est une matrice de contrôle systématique et <i>c</i> un ensemble de bits de contrôle non nuls est appelée un <b>syndrome</b>.</li></ul>
<p>Dans le cas général, si <i>l</i> est un message reçu qui n'est pas élément du code, son image par la matrice de contrôle est une valeur correspondant à un <i>H</i>.<i>c</i> donné. Il apparait que <i>m</i> est la plus petite correction à appliquer à <i>l</i> pour obtenir un code. En effet, <i>H</i>(<i>l</i> + <i>m</i>) est égal à <i>H</i>.<i>c</i> - <i>H</i>.<i>c</i> et la minimalité est une conséquence du paragraphe précédent.
</p><p>La détermination de la valeur <i>m</i> pour un <i>H</i>.<i>c</i> dépend largement du choix du code. Il correspond au problème classique couvert par l'<a href="Optimisation_lin%C3%A9aire" title="Optimisation linéaire">optimisation linéaire</a>. Dans la pratique, il est rare que de telles méthodes soient employées. Soit les bits de contrôles sont en nombre réduits, et la <a href="Combinatoire" title="Combinatoire">combinatoire</a> est réduite, soit l'espace est vaste et le code dispose d'autres propriétés souvent polynomiales et décrite dans l'article <a href="Code_cyclique" title="Code cyclique">code cyclique</a>.
</p><p>L'implémentation, dans la mesure où l'espace des bits de contrôle est réduit est en général réalisée par une <a href="Table_de_hachage" title="Table de hachage">table de hachage</a>. Cette table établit une <a href="Bijection" title="Bijection">bijection</a> entre chaque syndrome et le message de poids minimal ayant pour image par la matrice de contrôle le syndrome.
</p>
<ul><li>Une implémentation de la correction à l'aide d'une table de hachage fournissant une bijection entre les syndromes et les messages de poids minimal est appelée un <b>décodage par syndrome</b>.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Voir_aussi">Voir aussi</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Bibliographie">Bibliographie</h3></div>
<ul><li><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a href="Jessie_MacWilliams" title="Jessie MacWilliams">Jessie MacWilliams</a> et <a href="Neil_Sloane" title="Neil Sloane">Neil Sloane</a>, <i>The Theory of Error-Correcting Codes,</i> <a href="Elsevier_(%C3%A9diteur)" class="mw-redirect" title="Elsevier (éditeur)">North-Holland</a>, 1977 <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a> <span class="nowrap">978-0-44485009-6</span>)</small></li>
<li>A. Spătaru, <i>Fondements de la théorie de la transmission de l'information</i>, <a href="PPUR" class="mw-redirect" title="PPUR">PPUR</a>, 1987 <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a> <span class="nowrap">978-2-88074133-4</span>)</small></li>
<li><span class="ouvrage" id="Demazure"><span class="ouvrage" id="Michel_Demazure"><a href="Michel_Demazure" title="Michel Demazure">Michel <span class="nom_auteur">Demazure</span></a>, <cite class="italique">Cours d'algèbre : primalité, divisibilité, codes</cite> <small>[détail des éditions]</small><span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Cours+d%27alg%C3%A8bre&rft.stitle=primalit%C3%A9%2C+divisibilit%C3%A9%2C+codes&rft.aulast=Demazure&rft.aufirst=Michel&rfr_id=info%3Asid%2Ffr.wikipedia.org%3ACode+lin%C3%A9aire"></span></span></span></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Liens_externes">Liens externes</h3></div>
<ul><li><a rel="nofollow" class="external text" href="http://zanotti.univ-tln.fr/cd/chapter3.html">Code correcteur C.I.R.C</a> par J.P. Zanotti, <a href="Universit%C3%A9_de_Toulon" title="Université de Toulon">université de Toulon</a></li>
<li><a rel="nofollow" class="external text" href="http://www.univ-lille1.fr/bustl-grisemine/pdf/articles/A1998-14.pdf">L'algèbre et la correction des erreurs</a> par Dany-Jack Mercier, <a href="Universit%C3%A9_Antilles-Guyane" class="mw-redirect" title="Université Antilles-Guyane">université Antilles-Guyane</a></li>
<li><a rel="nofollow" class="external text" href="http://www.math.u-bordeaux.fr/~zemor/codes06.pdf">Code Linéaire</a> par G. Zemor, <a href="Universit%C3%A9_Bordeaux_I" class="mw-redirect" title="Université Bordeaux I">université Bordeaux I</a></li>
<li><span class="ouvrage" id="Bachoc2004-2005"><span class="ouvrage" id="Christine_Bachoc2004-2005">Christine Bachoc, « <a rel="nofollow" class="external text" href="https://www.math.u-bordeaux.fr/~kbelabas/teach/Agreg/code.pdf"><cite style="font-style:normal;">Cours de code</cite></a> », sur <span class="italique"><a href="Universit%C3%A9_Bordeaux_I" class="mw-redirect" title="Université Bordeaux I">université Bordeaux I</a></span>, 2004-2005</span></span></li>
<li><a rel="nofollow" class="external text" href="http://agreg-maths.univ-rennes1.fr/documentation/docs/codes.pdf">Code correcteur</a> par M. Coste, A. Paugam, R. Quarez, <a href="Universit%C3%A9_Rennes-I" title="Université Rennes-I">université de Rennes</a></li></ul>
<div class="navbox-container" style="clear:both;">
</div>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail des mathématiques</span> </span></li> <li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer skin-invert-image" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de l'informatique théorique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2022-07-10" href="https://fr.wikipedia.org/wiki/?title=Code_lin%C3%A9aire&oldid=195216298">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>